<?php
class Proy_avances extends MY_Controller {

	public function __construct()
    {
    	# Al constructor le envío la clase Controlador, y el nombre de la entidad gestionada
    	parent::__construct(get_class($this), 'Proy_avance');

    	$this->title = 'Proyecto :: Avances';
		$this->CARPETA_VISTAS = 'proyectos/';
		$this->nombre_entidad = 'Avance';

		$this->pagina_ver = $this->CARPETA_VISTAS . 'avance_ver_todos_view';
		$this->pagina_editar = $this->CARPETA_VISTAS . 'avance_edit_view';
		$this->pagina_filtros_ver = $this->CARPETA_VISTAS . 'avance_filtros_ver_todos_view';

		$this->exportarExcelPermitido = FALSE;
	}

	/* IMPORTANTE: DEBE existir esta función. 
	 * Crea un objeto de la entidad correspondiente y lo pobla con la información obtenida a 
	 * partir del formulario recibido a través de POST.	*/
	protected function getObjetoDesdeForm()
	{
		$idEntidad = is_numeric($this->input->post('txt_id')) ? $this->input->post('txt_id') : NULL;
		
		
		$objEntidad = $this->getObjeto($idEntidad);
		$objEntidad->fecha = parent::fechaFormatoBD($this->input->post('txt_fecha')); 
		$objEntidad->horas = $this->input->post('txt_horas');
		$objEntidad->detalle_actividad = $this->input->post('txt_detalle_actividad');

		$datos['objEntidad'] = $objEntidad;
		
		$id_requerimiento = is_numeric($this->input->post('sel_requerimiento')) ? $this->input->post('sel_requerimiento') : NULL;
		$id_usuario = is_numeric($this->input->post('sel_usuario')) ? $this->input->post('sel_usuario') : NULL;
		$objRequerimiento = new Proy_requerimiento($id_requerimiento);
		$objUsuario = new User_usuario($id_usuario);
		$datos['objRelacionados'] = array($objRequerimiento, $objUsuario);
		
		return $datos;
	}

	/* IMPORTANTE: DEBE existir esta función. 
	 * Carga en el arreglo que luego se pasarán a las vistas, los datos correspondientes a otras entidades que se
	 * necesiten. Por ejemplo, en este método deben cargarse las entidades a las que puede asociarse o relacionarse
	 * la entidad actual. Si no se requiriesen, no se agrega nada. */
	protected function cargarDatosRelacionados($dataView)
	{
		
		$obj_requerimiento = new Proy_requerimiento();
		$dataView['listado_requerimientos'] = $obj_requerimiento->get_iterated();

		$obj_usuario = new User_usuario();
		$dataView['listado_usuarios'] = $obj_usuario->get_iterated();
		
		return $dataView;
	}

	/* IMPORTANTE: DEBE existir esta función. 
	 * Obtiene el listado de elementos de acuerdo a los filtros que se hayan establecido y enviado a través
	 * del método POST. Devuelve un detalle de los filtros aplicados (o vacío si no hubiera filtros)	*/	
	protected function _aplicarFiltros($dataView = array())
	{
		// Creo un objeto del modelo, para poblarlo con los datos que necesito mostrar
		$objEntidad = $this->getObjeto();
		$detalle_filtros = '';

		
		$fecha = parent::fechaFormatoBD($this->input->post('f_txt_fecha'));
		if(!empty($fecha)) { 
			$objEntidad->where('fecha', $fecha); 
			$detalle_filtros .= (!empty($detalle_filtros) ? ' | ' : '') . 'Fecha => ' . $fecha;
		}

		$horas = trim($this->input->post('f_txt_horas'));
		if(!empty($horas)) { 
			$objEntidad->like('horas', $horas); 
			$detalle_filtros .= (!empty($detalle_filtros) ? ' | ' : '') . 'Horas => ' . $horas;
		}

		$detalle_actividad = trim($this->input->post('f_txt_detalle_actividad'));
		if(!empty($detalle_actividad)) { 
			$objEntidad->like('detalle_actividad', $detalle_actividad); 
			$detalle_filtros .= (!empty($detalle_filtros) ? ' | ' : '') . 'Detalle de la actividad => ' . $detalle_actividad;
		}

		$user_usuario_id = trim($this->input->post('f_txt_user_usuario_id'));
		if(!empty($user_usuario_id)) { 
			$objEntidad->like('user_usuario_id', $user_usuario_id); 
			$detalle_filtros .= (!empty($detalle_filtros) ? ' | ' : '') . 'Id Usuario => ' . $user_usuario_id;
		}
		
		$dataView['objEntidad'] = $objEntidad;
		$dataView['detalle_filtros'] = $detalle_filtros;
		
		return $dataView;
	}

	/* IMPORTANTE: DEBE existir esta función.
	 * Valida las condiciones que deben cumplirse para que un elemento pueda ELIMINARSE. */
	protected function validarEliminacion($id_elemento)
	{
	// Valido si tiene elementos asociados.
	     return TRUE;
	}

	/* IMPORTANTE: DEBE existir esta función.
	 * Valida las condiciones que deben cumplirse para que un elemento pueda EDITARSE. */
	protected function validarEdicion($id_elemento)
	{
		return TRUE;
	}
}